// 二次封装axios
import axios from 'axios';
// 导入antd 中的提示框组件
import { message } from 'antd';

// 判断当前环境为开发还是生产环境,然后这是不同的baseUrl
let baseUrl = '';
if (process.env.NODE_ENV == 'development') {
    // 开发环境 development
    baseUrl = '/api'
} else {
    // 开发环境 production
    baseUrl = 'https://reactapi.iynn.cn'
}
// 当你运行程序使用npm start,  process.env.NODE_ENV 为 development
// 当你执行npm run build ,process.env.NODE_ENV 为 production
// console.log('环境变量', process.env.NODE_ENV);

const instance = axios.create({
    baseURL: baseUrl,
    timeout: 10000,
    headers: { 'Content-Type': 'application/json' }
});

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // 设置token 验证用户
    if (localStorage.getItem('jwt')) {
        config.headers.Authorization = localStorage.getItem('jwt')
    }

    // console.log('config', config);

    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});



// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    // 一般用来对后端状态码进行处理,重新更新本地的token
    // 因为有时候需要使用token做一个登录有效期的验证, token 里包含了时间戳, 一般设置有效期为2小时
    if (response.data.errNo == 0) {
        message.success(response.data.message, 2)
    } else {
        message.error(response.data.errText, 2)
    }

    // 后续所有的接口如果返回token,那么需要更新本地的token,实现登录的有效期的顺延
    // 第一种方式:
    // if (response.data.context && response.data.context.jwt) {

    // }
    // 第二种方式: 
    if (response.data?.context?.jwt) {
        localStorage.setItem('jwt', response.data.context.jwt)
    }

    return response;
}, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
});

// 导出 instance

export default instance